import { PAGE_LIST, DEL_PAGE_LIST, ADD_MODULE,ATTRIBUTES } from './mutations-type'
import module from '@/util/module.js';
import util from '@/util/utils';
import { zIndexUp, zIndexDown, zIndexBottom, zIndexTop } from '@/util/swap-array.js'
export default {
    // 预览并保存
    preview(state){
        let index = util.findIndex(state.pageList, state.pageOnlyId)
        state.pageList[index].diyModule = state.diyModule
    },
    changePageIndex(state,id){
        if(state.pageOnlyId==-1){
            // 这里插入页面到自定义过的模块 到 diyModule
            state.pageOnlyId = id
            let afterIndex = util.findIndex(state.pageList, id)
            state.diyModule = JSON.parse(JSON.stringify(state.pageList[afterIndex].diyModule))
            state.controls = state.pageList[afterIndex].controls
            return
        }
        if(id === state.pageOnlyId) return;
        state.historyIndex = -1     // 历史记录格式化
        state.historyModule = []    // 历史记录格式化
        // 改变之前先将 编辑过的存到 pageList 列表中 
        let beforeIndex = util.findIndex(state.pageList, state.pageOnlyId)     // 改变之前的 index
        if(JSON.stringify(state.pageList[beforeIndex].diyModule) !== JSON.stringify(state.diyModule)){
            util.confirm(
                '是否保存当前编辑的内容?',
                () => {
                    state.pageList[beforeIndex].diyModule = state.diyModule
                    state.pageOnlyId = id
                    let afterIndex = util.findIndex(state.pageList, id)     // 改变之后的 index
                    state.diyModule = JSON.parse(JSON.stringify(state.pageList[afterIndex].diyModule))
                    state.controls = state.pageList[afterIndex].controls
                },
                () => {
                    state.pageOnlyId = id
                    let afterIndex = util.findIndex(state.pageList, id)     // 改变之后的 index
                    state.diyModule = JSON.parse(JSON.stringify(state.pageList[afterIndex].diyModule))
                    state.controls = state.pageList[afterIndex].controls
                }
            )
        }else{
            // 这里插入页面到自定义过的模块 到 diyModule
            state.pageOnlyId = id
            let afterIndex = util.findIndex(state.pageList, id)     // 改变之后的 index
            state.diyModule = JSON.parse(JSON.stringify(state.pageList[afterIndex].diyModule))
            state.controls = state.pageList[afterIndex].controls
        }
    },
    // 设置拖动排序后的diy模块
    dragDiyModule(state,arr){
        state.diyModule = JSON.parse(JSON.stringify(arr))
    },
    // 打开关闭设置属性面板
    toggleAttr(state,Boolean){
        state.showAttr = Boolean
    },
    [PAGE_LIST](state){                // 新增自定义页面列表
        let id = new Date().getTime()
        let obj = { name: '自定义页面', id, diyModule: [],controls: JSON.parse(JSON.stringify(module.controls)) }
        state.pageList.push(obj)
        if(state.pageList.length == 1){
            state.pageOnlyId = id
            state.controls = state.pageList[0].controls
        }
    },
    [DEL_PAGE_LIST](state,id){       // 删除自定义页面
        let index = util.findIndex(state.pageList, id)
        state.pageList.splice(index, 1)
        if(id === state.pageOnlyId){
            state.diyModule = []
            state.pageOnlyId = -1
        }
    },
    [ADD_MODULE](state,item){       // 添加diy模块
        item = JSON.parse(item)
        item.id = Date.now()        // 设置唯一id
        state.diyModule.push(item)
        
        // 切换页面的时候 会提示是否保存 所以这一步 可以省略 
        // let index = util.findIndex(state.pageList, state.pageOnlyId)
        // state.pageList[index].diyModule.push(JSON.parse(item))
    },
    [ATTRIBUTES](state,attr){       // 选中模块的所有属性
        state.attributes = attr
    },
    // 元件内数组的位置移动
    arrPartSwap(state,data){
        switch (data.type) {
            case 'up':
                zIndexUp(state.attributes.list,data.index)
                break;
            case 'down':
                zIndexDown(state.attributes.list,data.index)
                break;
            case 'top':
                zIndexTop(state.attributes.list,data.index)
                break;
            case 'bottom':
                zIndexBottom(state.attributes.list,data.index)
                break;
            default:
                break;
        }
    },
     // 自定义模块内数组的位置移动
     moduleSwap(state,data){
        switch (data.type) {
            case 'up':
                zIndexUp(state.diyModule,data.index)
                break;
            case 'down':
                zIndexDown(state.diyModule,data.index)
                break;
            case 'delete':
                state.diyModule.splice(data.index,1)
                break;
            default:
                break;
        }
    },
    // 新增元件
    partAdd(state){
        state.attributes.list.push(JSON.parse(JSON.stringify(...module.icontext)))  // 
    },
    // 删除元件
    partDele(state,index){
        state.attributes.list.splice(index,1)
    },
    // 记录是点击添加模块 让页面盒子滚动到最下面
    isAddModule(state, Boolean){
        state.isAddModule = Boolean
    },
    // 是否显示放在这里盒子
    toggleDragBox(state,Boolean){
        state.showDragBox = Boolean
    },
    // 将对象插入到指定位置
    insertDiyModule(state, data){
        let diyIndex = data.index == 'first' ? 0 : +data.index + 1
        let item = JSON.parse(data.item)
        item.id = Date.now()            // 设置唯一id
        state.diyModule.splice(diyIndex, 0, item);
    },

    // 记录历史步骤
    recordHistory(state, data){
        state.historyModule.push(data)
        if(state.historyModule.length > 11){
            state.historyModule.shift()
        }
    },
    // 撤销和恢复历史步骤操作
    changeHistory(state, Boolean){
        state.isRevoke = false
        state.timer && clearTimeout(state.timer)
        Boolean ? state.historyIndex -- : state.historyIndex ++
        let diyModule = state.historyModule.slice(state.historyIndex)[0]
        state.diyModule = JSON.parse(JSON.stringify(diyModule))
        state.timer = setTimeout(() => {
            state.isRevoke = true
        }, 100)
    },
    // 撤销到一半的时候 在操作编辑 从撤销索引开始往后面的记录清空 撤销索引之前的记录保留
    // ps: 历史记录： [1,2,3,4,5,6,7,8]  索引：-4； 处理后 历史：[1,2,3,4,5, 9] 索引：-1
    recordMiddleHistory(state){
        let historyIndex = JSON.parse(JSON.stringify(state.historyIndex))
        state.historyModule.splice(++historyIndex)
        state.historyIndex = -1
    }
}